【レポート】Solving Weekly Challenge using In-Database tools – Alteryx Inspire 2023
こんにちは、スズです。
現地時間の2023年5月22日(月)~5月25日(木)に、ラスベガスにてAlteryx Inspire 2023が開催されました。本記事では、Alteryx Inspire 2023で開催されたセッション『Solving Weekly Challenge using In-Database tools』についてお届けします。
セッション概要(日本語訳)
本セッションでは、分析スキルのエクササイズやSQLのスキルアップのために、In-DBツールやSQLを活用するメリットを掘り下げます。Weekly Challengeに掲載された課題を中心に、In-DB処理を活用した効率的かつ効果的な解決策を学びます。この機会にIn-DB処理の世界に触れて、分析力を高めてみてはいかがでしょうか。
セッションレポート
登壇者紹介
- Thales Donizeti Silva
- Senior Consultant, Analytics Engineering, phData
- 2019年からAlteryx ACE
What are Weekly Challenge?
- Weekly ChallengeはAlteryx Communityによる取り組み
- ユーザーは課題に対して解決策を提示する
- 他のユーザーの解決策を見ることができる
- 練習や腕試しにとてもいい方法
What are In-Database tools?
- In-DBツールは通常のツールとは少し違う仕組みになっている
- データの処理はデータベースサーバーで行われる
- データベース処理と外部ファイルやAPIを組み合わせて、外部データをデータベースにプッシュし、データを融合させるというハイブリッドなアプローチを考える上で、In-DBツールはとても便利なツール
How do In-Database tools work?
- どのツールもCTE(共通テーブル式)を構築している
- Alteryxが最終的に連結SQL文をデータベースにプッシュするまで、全てのツールがCTEを構築している
- ユーザーがデータを見るために閲覧In-DBツールを使用する場合、そのデータはデータベースを離れる
- この処理は透過的で、Alteryxが動的出力In-DBツールを使って生成するクエリを見ることができる
- また、動的入力In-DBツールを使うことで、SQLをデータベースにプッシュすることもできる
- このセッションでは、これらの機能をお見せすることを第一の目的としている
- 初心者向けのチャレンジ
Weekly Challenge #1 - Join to Range
- Weekly Challenge #1では、郵便番号のデータと、郵便番号の範囲を持つ顧客データを結合、地域別に顧客の数を集計する
ブログ執筆者補足:Alteryx Communityの日本語サイトでも問題が掲載されています。以下のサイトをご確認ください。
チャレンジ #1: 範囲に結合 - Alteryx Community
- Weekly Challengeではstartのファイルと、最終的なデートセットとなるsolutionのファイルがある
- solutionのファイルには最終的なデータセットがあり、これと比較することで正しいかどうかを確認できる
Setup
- In-DBツールを使うために使用するデータベースを用意
- データベースに接続するためのドライバをインストール
- あわせてODBCを設定
- Alteryxでデータ接続を作成
- In-DBツールで作業が行えるよう、データベースにstartファイルのデータを生成
- オブジェクトをテーブルに接続
Database - Snowflake
- Snowflakeは30日間の無料トライアルが可能
- In-DBツールを使ったWeekly Challengeの取り組みに利用できる
- データベースサーバーなどのインストールは不要
- Weekly Challengeのテーブルを保持するためにデータベースリソースの作成が必要
ODBC Driver and Connections
- ODBCドライバはAlteryxのライセンスポータルからダウンロード可能
- Windows PC上でODBCを検索するとメニューが表示される
- Snowflakeに接続するためのDSNを作成する
Data Connection to load data
- データをロードするためのデータ接続を作成する
- バルクローダーも利用可能
- AlteryxからSnowflakeにデータをロードする最も早い方法
- データ接続を管理するオプションを選択し、Snowflake接続を作成する
- ローカルステージング方式を選択する
In-DB connection
- In-DBツールで作業するため、エンティティ接続を作成する
- ODBCで作成したDSNを参照し、Table/Fieldを選択し、SQL StyleをNoneにする
Load Start files to Snowflake
- データ型が適切であることを確認し、作成した接続を参照してデータを出力する
- Weekly Challengeごとにスキーマを作成することで、整理して使える
- In-DBツールを使ってWeekly Challengeに取り組むためのセットアップは完了
Original Solution
- Weekly Challengeの元のsolutionを確認
- 列分割ツール、行生成ツールがあるが、これらのツールはIn-DBツールには存在しない
- In-DBツールを使って処理する場合は避ける必要がある
- 列分割ツールでは対象の列を複数の列に分割する
- 行生成ツールで範囲内の全ての行(レコード)を生成
In-DB approach - Connect to the Reference Data
- In-DBツールを使った場合のアプローチ
- 接続In-DBツールにSELECT句を使ってテーブルを読み込む
Formula In-DB tool
- 参照テーブル、ルックアップテーブルを操作して、テキストをカラムに変換する動作を再現
- いくつか文字列操作のSQL関数を使うことができる
- LEFT関数、RIGHT関数を使うことで、範囲を取得できる
- 郵便番号の場合、2000年から2019年までの範囲がある
- 真ん中にダッシュがあるため、ダッシュで分割する
Output the Query generated
- 行生成する方法は基本的にはないため、Alteryxで生成してSnowflakeに戻す
- 動的出力In-DBツールを使って、これまで生成したクエリを参照する
Paste the full query output in Snowflake
- SQL Formatterを使用することがおすすめ
- Alteryxで作成したこれまでのCTEを参照して、SQLを使って作業を継続する
- Alteryxは使用する各ツールのCTE名を一意のIDで生成する
Add the Last Query Alias to the CTE
- 最後のクエリエイリアスを追加してクエリを編集する
Add a Recursive CTE
- Recursive CTEでテーブルをループして行を生成する
- CTE名は大文字にする必要がある
Use a Range Join (SQL)
- SQLでは範囲結合にBETWEEN区を使うことができる
- 範囲結合は行生成ツールの条件部分
- Recursive CTEと組み合わせることで行生成ツール相当になる
Transform the user added CTEs into a Query Alias List
- Alteryxにクエリをプッシュして、In-DBツールでの作業を再開できる
- クエリリストを用意する
- ポジトリからSQLファイルを読み込んで、プロセスを自動化することもできる
Combine the Query Alias Lists
- 生成されたリストを結合ツールで結合できる
- 手動で行う場合は余分な空白が発生する可能性がある
- 全てを1つのレコードに連結すると、基本的に1つのクエリとして解釈される
- 新しい行の区切り文字で連結し、動的入力In-DBツールを追加
- クエリエイリアスリストをプッシュする
Final In-DB steps
- 結合In-DBツールで内部結合を行う
- 集計In-DBツールで集計する
- 最後にデータをストリームアウトして、Alteryxで見ることができるようにする
- Snowflakeに書き戻すことも、最終的なクエリを確認することもできる
- In-DBツールを使用することで得られる柔軟性と、Alteryxを使用することで何が行われているかの理解を促進できる
最後に
Alteryx Inspire 2023のセッション『Solving Weekly Challenge using In-Database tools』のレポートをお届けしました。
個人的にIn-DBツールはあまり使う機会がなく、馴染みの薄いツールでした。Weekly Challengeの問題をIn-DBツールを使って解くことで、In-DBツールやSQLを使う練習になりそうですね。